import  requests
# 导入pygal以及要应用于图标的Pygal样式
import pygal

from pygal.style import LightColorizedStyle as LCS, LightenStyle as LS

# 执行API(Web应用编程接口)调用并存储响应
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
# --------笔记--------
#  get() 函数返回指定键的值，如果值不在字典中返回默认值
# --------笔记--------
r = requests.get(url)
# status_code属性让我们知道请求是否成功（状态码200表示成功）
print("Status Code:", r.status_code)

# 将API响应存储在一个变量中
response_dict = r.json()
# 处理结果
print(response_dict.keys())
# 打印了与total_count相关联的值,指出GitHub总共包含了多少个Python仓库
print("Total repositories:", response_dict['total_count'])

# 探索有关仓库的信息
# 与'item'相关联的值是一个列表
# 其中包含很多字典，而每个字典都包含有关一个Python仓库的信息
repo_dicts = response_dict['items']
# 打印列表长度，以获悉我们获得了多少个仓库的信息
print("Repositories returned:", len(repo_dicts))

# 研究第一个仓库
# 提取了repo_dicts中的第一个字典，并将其存储在repo_dict中
# repo_dict = repo_dicts[0]
# 打印这个字典包含的键的数目，看看其中有多少信息
# print("\nKeys:", len(repo_dict))
# 打印这个字典的所有键，看看其中包含哪些信息
# for key in sorted(repo_dict.keys()):
    # print(key)

# 研究多个仓库
# print("\nSelected information about first repository:")
#print("\n--------------------每个仓库的信息--------------------")
#for repo_dict in repo_dicts:
    #print("\n项目名称:", repo_dict['name'])
    #print("所有者:", repo_dict['owner']['login'])
    #print("评级:", repo_dict['stargazers_count'])
    #print("仓库:", repo_dict['html_url'])
    #print("创建时间:", repo_dict['created_at'])
    #print("最后更新于:", repo_dict['updated_at'])
    #print("仓库描述:", repo_dict['description'])

# 创建两个空列表，用于存储包含在图表中的信息
# names：每个项目的名称，用于给条形加上标签
# stars：项目获得了多少个星，用于确定条形的高度
names, plot_dicts = [], []
# 使用循环将这两项分别附加到各自列表的末尾
for repo_dict in repo_dicts:
    names.append(repo_dict['name'])
    plot_dict = {
        'value': repo_dict['stargazers_count'], # 使用键'value'存储星数
        'label': repo_dict['description'], # 使用键'label'存储项目描述
        'x_link': repo_dict['html_url'],   # 使用键'x_link'存储网站的链接
    }
    plot_dicts.append(plot_dict)

# 可视化
# 使用LightenStyle类（别名LS）定义了一种样式，并将其基色设置为深蓝色

# --------笔记--------
# #333366 十六进制颜色信息
# 在RGB色彩模式，六角三重 #333366 有小数指数: 3355494,
# 由 20% 红, 20% 绿色 和 40% 蓝色.
# #333366 在CMYK色彩模式, 由 50% 青色, 50% 品红, 0% 黄色 和 60% 黑色.
# #333366 是网页安全色.
# --------笔记--------

my_style = LS('#333366', base_style = LCS)
# 使用Bar()创建一个简单的条形图

my_config = pygal.Config()  # 创建一个Pygal类Config的实例my_config
my_config.x_label_rotation = 45 # 让标签绕x轴旋转45度
my_config.show_legend = False # 隐藏图例
my_config.title_font_size = 24 # 图表标题字体大小
my_config.label_font_size = 14 # 副标签字体大小（x轴上的项目名和y轴上的大部分数字）
my_config.major_label_font_size = 18 # 主标签字体大小（y轴上为5000整数倍的刻度）
my_config.truncate_label = 15 # 将较长的项目名缩短为15个字符
my_config.show_y_guides = False # 隐藏图表中的水平线
my_config.width = 1000 # 自定义宽度

chart = pygal.Bar(my_config, style=my_style)

# 指定标题
chart.title = 'GitHub上受欢迎程度最高的Python项目'
chart.x_labels = names

chart.add('', plot_dicts)
chart.render_to_file('python_repos.svg')